/**
 * com.cnhis.his.customer.bo.Vaf1Bo.java
 */
package com.mbmed.doctor.medadvice.bo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.mbmed.doctor.commons.mapper.ModelVo;
import com.mbmed.doctor.commons.utils.Page;
import com.mbmed.doctor.commons.utils.StaticKeys;
import com.mbmed.doctor.medadvice.dao.Vaf2Dao;
import com.mbmed.doctor.medadvice.mapper.Vaf2;

/**
 * @file  Vaf1Bo.java
 * @author 刘武
 * @version 0.1
 * @todo	Vaf1业务操作接口
 * Copyright(C), 2013-2014
 *		 Shenzhen Coordinates Software Development Co., Ltd.
 * History
 *   	1. Date: 2014-10-16 04:24:02
 *      	Author: 刘武
 *      	Modification: this file was created
 *   	2. ...
 */
@Service
public class Vaf2Bo {
	@Resource
	private Vaf2Dao vaf2Dao;
	

    /**
	 * @param vaf1Dao the vaf1Dao to set
	 */
	public void setVaf2Dao(Vaf2Dao vaf1Dao) {
		this.vaf2Dao = vaf2Dao;
	}


	/**
     * 配置文件中编号：(1)
	 * 查找所有数据库记录
     * @return type : List 返回查询操作所有符合条件的记录的VO对象集合，操作失败返回null
     */
	@SuppressWarnings({ "rawtypes" })
    public List getAll() throws Exception {
		return vaf2Dao.selectAll();
	}
	
    /**
     * 配置文件中编号：(2)
     * @param valueOne 需要进行查询的值。
     * @param valueTwo 需要进行查询的值。
     * @param valueThree 需要进行查询的值。
     * @return type : List 返回查询操作所有符合条件的记录的VO对象集合，操作失败返回null
     * @throws Exception
     */
	@SuppressWarnings({ "rawtypes" })
    public List getByParamMap(Map paramMap) throws Exception{
		 return vaf2Dao.selectByParamMap(paramMap);
	}
	
	
	   /**
     * 配置文件中编号：(2-3)
     * @param valueOne 需要进行查询的值。
     * @param valueTwo 需要进行查询的值。
     * @param valueThree 需要进行查询的值。
     * @return type : List 返回查询操作所有符合条件的记录的VO对象集合，操作失败返回null
     * @throws Exception
     */
	@SuppressWarnings({ "rawtypes" })
    public List getMedAdviceVaf2ByVae01(int vae01) throws Exception{
		 return vaf2Dao.selectMedAdviceVaf2ByVae01(vae01);
	}
	
	
	
	   /**
     * 配置文件中编号：(2-4)
     * @param valueOne 需要进行查询的值。
     * @param valueTwo 需要进行查询的值。
     * @param valueThree 需要进行查询的值。
     * @return type : Vaf2 是否发送转科医嘱，操作失败返回null
     * @throws Exception
     */
	@SuppressWarnings({ "rawtypes" })
    public Vaf2 getTransferVaf2ByVae01(String vae01) throws Exception{
		 return vaf2Dao.selectTransferVaf2ByVae01(vae01);
	}
	
	
	
	   /**
     * 配置文件中编号：(2-5)
     * @param valueOne 需要进行查询的值。
     * @param valueTwo 需要进行查询的值。
     * @param valueThree 需要进行查询的值。
     * @return type : Vaf2 是否下达出院医嘱，操作失败返回null
     * @throws Exception
     */
	@SuppressWarnings({ "rawtypes" })
    public Vaf2 getLeaveHospitalVaf2ByVae01(String vae01) throws Exception{
		 return vaf2Dao.selectLeaveHospitalVaf2ByVae01(vae01);
	}
	
	/**
     * 配置文件中编号：(3)
     * 查找符合条件的所有数据库记录
     * @param vo 与数据库中记录对应的值对象
     * @return type : List 返回查询操作所有符合条件的记录的VO对象集合，操作失败返回null
     * @throws Exception
     */
	@SuppressWarnings({ "rawtypes" })
    public List get(Vaf2 vo) throws Exception{
		if(vo == null) return null;
        return vaf2Dao.selectByVo(vo);
	}
	
	/**
     * 配置文件中编号：(3-4)
     * 医嘱停止
     * @param map 与数据库中记录对应的值对象
     * @return type : String 返回存储过程执行结果
     * @throws Exception
     */
	@SuppressWarnings({ "rawtypes" })
    public String execClinicAdviceStop(Map paramsMap) throws Exception{
		if(paramsMap == null) return null;
        return vaf2Dao.execClinicAdviceStop(paramsMap);
	}
	
	/**
     * 配置文件中编号：(3-5)
     * 医嘱删除
     * @param map 与数据库中记录对应的值对象
     * @return type : String 返回存储过程执行结果
     * @throws Exception
     */
	@SuppressWarnings({ "rawtypes" })
    public String execClinicAdvice_Del(Map paramsMap) throws Exception{
		if(paramsMap == null) return null;
        return vaf2Dao.execClinicAdvice_Del(paramsMap);
	}
	
	
	/**
     * 配置文件中编号：(3-6)
     * 临床药物评价
     * @param map 与数据库中记录对应的值对象
     * @return type : String 返回存储过程执行结果
     * @throws Exception
     */
	@SuppressWarnings({ "rawtypes" })
    public String execClinicDrugJudge(Map paramsMap) throws Exception{
        String rs =  vaf2Dao.execClinicDrugJudge(paramsMap);
        return rs;
	}
	
	
	
	/**
     * 配置文件中编号：(3-7)
     * 临床诊断插入
     * @param map 与数据库中记录对应的值对象
     * @return type : String 返回存储过程执行结果
     * @throws Exception
     */
	@SuppressWarnings({ "rawtypes" })
    public String execClinicCAMInsert(Map paramsMap) throws Exception{
        String rs =  vaf2Dao.execClinicCAMInsert(paramsMap);
        return rs;
	}
	
	
	/**
     * 配置文件中编号：(3-8)
     * 医嘱执行
     * @param map 与数据库中记录对应的值对象
     * @return type : String 返回存储过程执行结果
     * @throws Exception
     */
	@SuppressWarnings({ "rawtypes" })
    public void execClinicVaf1Insert(Map paramsMap) throws Exception{
       vaf2Dao.execClinicVaf1Insert(paramsMap);
	}
	
    /**
     * 配置文件中编号：(3-2)
     * 分页查找
     * @param condition 与数据库中记录对应的值对象
     * @return type : Page 返回满足条件的记录集，操作失败返回null
     * @throws Exception
     */
	@SuppressWarnings("rawtypes")
	public Page getPage(Map condition) throws Exception{
		if(condition == null) return null;
        return vaf2Dao.selectForPage(condition);
	}
	
	@SuppressWarnings({ "rawtypes" })
    public Page getPageByParamMap(Map condition, int currPage,	int pageSize) throws Exception{
		if (condition == null)
			return null;
		return vaf2Dao.queryByParams(condition, currPage, pageSize);
	}
	
    /**
     * 配置文件中编号：(3-3)
     * 查找符合条件的所有数据库记录
     * @param pkid 与数据库中主键对应的值
     * @return type : RpDir 返回查询操作所有符合条件的记录的VO对象，操作失败返回null
     * @throws Exception
     */
	public Vaf2 get(String pkid) throws Exception{
		if(pkid==null) return null;
     	return vaf2Dao.selectByPk(pkid);
	}
	
	/**
     * 配置文件中编号：(4)
     * 向数据库中插入一条记录
     * @param vo 与数据库中记录对应的值对象
     * @return type : RpDir 返回插入操作是否成功
     * @throws Exception
     */
    public Vaf2 save(Vaf2 vo) throws Exception{
    	if(vo == null) return null;		
		if(vo.getVaf01()!=null) {
			return vaf2Dao.updateByVo(vo);
		} else {
			//vo.setVaf01(vaf1Dao.getPKValue());
			return vaf2Dao.insertByVo(vo);
		}
    }
    
    /**
     * 配置文件中编号：(5)
     * 删除符合条件的所有数据库记录
     * @param pkid 与数据库中主键对应的值
     * @return type : boolean 返回删除操做是否成功，操作失败返回false
     */
    public boolean remove(String pkid) throws Exception{
    	if(pkid == null) return false;
    	return vaf2Dao.deleteByPk(pkid);
    }
    

    
    /**
     * 配置文件中编号：(6)
     * 删除数据库中与传入的值对象对应的记录
     * @param vo 与数据库中记录对应的值对象
     * @return type : boolean 返回删除操作是否成功
     * @throws Exception
     */
    public boolean remove(Vaf2 vo) throws Exception{
    	if(vo == null) return false;
     	return vaf2Dao.deleteByVo(vo);
    }


	@SuppressWarnings({ "rawtypes", "unchecked" })
	public ModelVo selCommsProjcet(Map map) throws Exception {
		ModelVo mo = new ModelVo();
		mo.setResult(StaticKeys.OH_SUCCESS);
		List ls = vaf2Dao.selCommsProjcet(map);
		
		Set<String> set = new TreeSet<String>();
		int l = ls.size();
		
		//根据项目类别排序
		for(int i=0;i<l;i++){
			Map m = (Map) ls.get(i);
			set.add((String)m.get("BDA01"));
		}
		List rel = new ArrayList();
		Iterator<String> it = set.iterator();
		//根据项目类型重整输出结果
		while (it.hasNext()){
			String key = it.next();
			List ll = new ArrayList<>();
			for(int i=0;i<l;i++){
				Map mm = (Map) ls.get(i);
				if(key.equals((String)mm.get("BDA01"))){
					ll.add(mm);
				}
			}
			rel.addAll(ll);
		}
		mo.setList(rel);
		
		return mo;
	}
}
